6-1 炟x}PC

一個矩陣 $A$ 的反矩陣可表示成 $A^{-1}$,它可滿足下列恆等式:

$$ \left\{ \begin{matrix} AA^{-1}=I\\ A^{-1}A=I \end{matrix} \right. $$

Hint
  • 只有在 $A$ 為方陣時,$A^{-1}$ 才存在。
  • 若 $A^{-1}$ 不存在,則 $A$ 稱為 Singular。
  • 注意:本章牽涉許多線性代數的專有名詞。若無「信、雅、達」之中文翻譯,則仍以英文名詞為主,以免詞不達意。

MATLAB 的 inv 指令可用於計算反矩陣,例如我們可以計算一個 4x4 的 Pascal 方陣的反矩陣,並進行驗算,如下:

Example 1: 06-線性代數/inv01.mA = pascal(4); % 產生 4x4 的 Pascal 方陣 B = inv(A) I1 = A*B I2 = B*A maxDiff=max(max(abs(eye(4)-I1)))B = 4.0000 -6.0000 4.0000 -1.0000 -6.0000 14.0000 -11.0000 3.0000 4.0000 -11.0000 10.0000 -3.0000 -1.0000 3.0000 -3.0000 1.0000 I1 = 1.0000 0 0 0 0 1.0000 0 0 0 0 1.0000 0 -0.0000 -0.0000 0.0000 1.0000 I2 = 1.0000 0 0 -0.0000 0 1.0000 0 -0.0000 0 0 1.0000 0.0000 0 0 0 1.0000 maxDiff = 7.1054e-015

Hint
由於 Pascal 矩陣的行列式值為 1,因此其反矩陣之元素均為整數。

由於計算機內部的精準度有限,因此 $I1 = A*B$ 與 $I2 = B*A$ 都不會完全等於一個單位矩陣,但其誤差相當小,誤差量可由 maxDiff = max(max(abs(eye(4)-I1))) 來計算,小於 $10^{-14}$。

若矩陣 $A$ 為 Singular (即其反矩陣不存在),則在使用 inv 指令時,會產生警告訊息,例如:

Example 2: 06-線性代數/inv02.mA = [1 2 3; 4 5 6; 7 8 9]; B = inv(A){Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.541976e-018.} > In <a href="matlab: opentoline('d:\users\jang\books\matlabProgramming4guru\example\06-線性代數\inv02.m',2,1)">inv02 at 2</a> In <a href="matlab: opentoline('d:\users\jang\books\goWriteOutputFile.m',75,1)">goWriteOutputFile>dummyFunction at 75</a> In <a href="matlab: opentoline('d:\users\jang\books\goWriteOutputFile.m',52,1)">goWriteOutputFile at 52</a> B = 1.0e+016 * -0.4504 0.9007 -0.4504 0.9007 -1.8014 0.9007 -0.4504 0.9007 -0.4504

Hint
  • 矩陣 A 為 Singulardet(A)=0

欲計算矩陣 $A$ 的行列式,可用 det 指令,舉例如下:

Example 3: 06-線性代數/det01.mA = [1 3 4; -3 -4 -1; 2 2 5]; d = det(A)d = 29.0000

由 Crammer Rule 可知矩陣 A 的行列式和反矩陣有下列關係式:

$$A^{-1}=\frac{adj(A)}{|A|}$$

其中 $|A|$ 代表 A 的行列式,$adj(A)$ 代表 $A$ 的 Adjoint Matrix,換句話說,若 $A$ 為整數矩陣,則 $|A|$ 乘上 $A^{-1}$ 必為整數矩陣,可驗証如下:

Example 4: 06-線性代數/det02.mA = [1 3 4; -3 -4 -1; 2 2 5]; det(A)*inv(A)ans = -18.0000 -7.0000 13.0000 13.0000 -3.0000 -11.0000 2.0000 4.0000 5.0000

Hint
  • 雖然 Crammer Rule 形式相當精簡,但並不適用於數值運算,MATLAB 在計算反矩陣時,並不使用 Crammer Rule,而是使用各種矩陣分解的方法。

若將 inv(A) 以有理形式(Rational Format,即分子和分母都是整數的分數)來表示,亦可察覺出它和行列式的關係,例如:

Example 5: 06-線性代數/det03.mA = [1 3 4; -3 -4 -1; 2 2 5]; format rat % 以有理形式表示數值 inv(A) format short % 改回預設的數值表示形式ans = -18/29 -7/29 13/29 13/29 -3/29 -11/29 2/29 4/29 5/29

從這裡可以很明顯的看出,inv(A) 中每個元素的分母值,就是 det(A)。


MATLAB程式設計:進階篇